package com.ssd.serialize;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 自定义BigDecimal序列化器
 * 用于将BigDecimal对象序列化为JSON字符串时，指定其精度和舍入方式
 */
public class BigDecimalSerializer extends JsonSerializer {
    // 单例实例，用于提供序列化器的唯一实例
    public static final BigDecimalSerializer instance = new BigDecimalSerializer();

    /**
     * 序列化方法
     * 将BigDecimal对象转换为字符串并写入JSON生成器
     * 如果输入对象为null或不是BigDecimal实例，则不执行任何操作
     *
     * @param o 待序列化的对象，预期为BigDecimal实例
     * @param jsonGenerator 用于生成JSON内容的工具
     * @param serializerProvider 提供序列化器的上下文
     * @throws IOException 如果写入JSON过程中发生错误
     */
    @Override
    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (o != null && o instanceof BigDecimal) {
            BigDecimal bigDecimal = (BigDecimal) o;
            // 设置BigDecimal精度为2，舍入方式为向下，然后将其转换为字符串进行序列化
            jsonGenerator.writeString(bigDecimal.setScale(2, RoundingMode.DOWN).toString());
        }
    }
}

